package ics;

import java.util.ArrayList;
import java.util.List;

/**
 * 特殊的父节点。
 * 一般的节点仅仅需要name和value即可，但是少部分节点需要包含其他节点，像树的父节点一样，所以需要额外的数据结构存储子节点。
 * ics格式中，如VEVENT需要在开始和结束添加“BEGIN:VEVENT”和“END:VEVENT”，所以重写了toString。
 * 为什么不用treemap之类的数据结构，而用list？因为遍历list的时候能很方便按照顺序遍历，让ics文件稍微有逻辑，treemap也可以，但是需要自己写排序。
 */
public class ParentNode extends Node {
    protected List<Node> nodes = new ArrayList<>();

    public void add(Node node) {
        this.nodes.add(node);
    }

    public Node getNode(String name) throws NullPointerException {
        for (Node n : nodes) {
            if (n.getName().equals(name)) {
                return n;
            }
        }
        return null;
    }

    public List<Node> getNodes(String name) {
        List<Node> nodeList = new ArrayList<>();
        for (Node node : nodes) {
            if (node.getName().equals(name)) {
                nodeList.add(node);
            }
        }
        return nodeList;
    }

    @Override
    public String toString() {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("BEGIN:");
        stringBuilder.append(getName());
        stringBuilder.append("\n");
        for (Node p : nodes) {
            stringBuilder.append(p.toString());
            stringBuilder.append("\n");
        }
        stringBuilder.append("END:");
        stringBuilder.append(getName());
        return stringBuilder.toString();
    }
}
